

from rest_framework import serializers
from goods.models import SKUImage,SKU
from meiduo_mall.utils.fdfs.custom_upload_handler import custom_upload_by_buffer


class ImageModelSerializer(serializers.ModelSerializer):
    # image = serializers.ImageField() # 图片类型字段

    class Meta:
        model = SKUImage
        fields = [
            'id',
            'sku',
            'image'
        ]


    # def validate(self, attrs):
    #     # 1、提取文件对象
    #     file_obj = attrs.get('image')
    #     # 2、获得文件数据
    #     content = file_obj.read()
    #     # 3、调用上传函数完成上传，得到文件id
    #     file_id = custom_upload_by_buffer(content)
    #     # 4、返回有效数据
    #     attrs['image'] = file_id
    #     return attrs


    # def create(self, validated_data):
    #     """
    #     :param validated_data:
    #         sku： sku对象
    #         image： 一个文件对象(前端传来的文件数据)
    #     :return:
    #     """
    #     # ModelSerializer的create方法无法帮我完成fdfs文件上传操作
    #
    #     # 自己实现文件上传
    #     # 思考：我如何获取文件内容(字节文件数据？！)
    #     content = validated_data.get('image').read()
    #     file_id = custom_upload_by_buffer(
    #         content
    #     )
    #
    #     # image文件类型字段，在被赋值成一个文件对象的时候，会自动调用存储后端来完成保存
    #     # 在被赋值成一个字符串的时候，不会调用存储后端，会直接将该字符串存储在mysql中
    #     instance = SKUImage.objects.create(sku=validated_data.get('sku'), image=file_id)
    #
    #     return instance


    # def update(self, instance, validated_data):
    #     content = validated_data.get('image').read()
    #     file_id = custom_upload_by_buffer(
    #         content
    #     )
    #
    #     validated_data['image'] = file_id
    #     instance = super().update(instance, validated_data)
    #     return instance



class ImageSKUSimpleSerializer(serializers.ModelSerializer):
    class Meta:
        model = SKU
        fields = [
            'id',
            'name'
        ]